//package com.chenfan.magic.base;
//
//import freemarker.template.Template;
//import freemarker.template.TemplateException;
//import io.idc.business.system.service.IParamService;
//import io.idc.common.constant.ParamConstant;
//import io.idc.core.log.exception.ServiceException;
//import io.idc.core.tool.kits.StringKit;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.io.FileSystemResource;
//import org.springframework.mail.SimpleMailMessage;
//import org.springframework.mail.javamail.JavaMailSenderImpl;
//import org.springframework.mail.javamail.MimeMessageHelper;
//import org.springframework.stereotype.Component;
//import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
//import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
//
//import javax.mail.MessagingException;
//import javax.mail.internet.MimeMessage;
//import javax.mail.internet.MimeUtility;
//import java.io.File;
//import java.io.IOException;
//import java.io.UnsupportedEncodingException;
//import java.util.Map;
//import java.util.Properties;
//import java.util.concurrent.Executor;
//import java.util.concurrent.Executors;
//
///**
// * 邮箱助手.
// *
// * @author troy
// * @date 2019/2/2 4:13 AM
// */
//@Component
//@Slf4j
//public class EmailFunc {
//
//    /**
//     * 定义一个线程池, 实现异步线程发送邮件, 避免长时等待效果.[当然, 有舍必有得, 如果发送过程出现异常, 用户是收不到任何反馈的.]
//     */
//    private static Executor executor = Executors.newFixedThreadPool(10);
//
//    @Autowired
//    private IParamService paramService;
//    @Autowired
//    private FreeMarkerConfigurer templateEngine;
//
//    private JavaMailSenderImpl javaMailSender;
//
//    //基础邮件类型(模板邮件不在范围内.)
//    public static final String SIMPLE = "SIMPLE";
//    public static final String HTML = "HTML";
//    public static final String HTML_HAS_IMAGE = "HTML_HAS_IMAGE";
//    public static final String HTML_HAS_ATTACH = "HTML_HAS_ATTACH";
//
//    private String from;
//    private String fromname;
//
//    private void emailConfig() {
//        javaMailSender = new JavaMailSenderImpl();
//        javaMailSender.setHost(paramService.getById(ParamConstant.email_host).getParamValue());
//        javaMailSender.setPort(Integer.parseInt(paramService.getById(ParamConstant.email_port).getParamValue()));
//        javaMailSender.setUsername(paramService.getById(ParamConstant.email_username).getParamValue());
//        javaMailSender.setPassword(paramService.getById(ParamConstant.email_password).getParamValue());
//        javaMailSender.setDefaultEncoding(paramService.getById(ParamConstant.email_encoding).getParamValue());
//        javaMailSender.setProtocol(paramService.getById(ParamConstant.email_protocol).getParamValue());
//        Properties p = new Properties();
//        p.setProperty("mail.smtp.auth", paramService.getById(ParamConstant.email_smtp_auth).getParamValue());
//        p.setProperty("mail.smtp.starttls.enable", paramService.getById(ParamConstant.email_smtp_starttls_enable).getParamValue());
//        p.setProperty("mail.smtp.starttls.required", paramService.getById(ParamConstant.email_smtp_starttls_required).getParamValue());
//        javaMailSender.setJavaMailProperties(p);
//        from = paramService.getById(ParamConstant.email_from).getParamValue();
//        fromname = paramService.getById(ParamConstant.email_fromname).getParamValue();
//    }
//
//    /**
//     * 功能描述：发送简单纯文本邮件
//     *
//     * @param to      发送目标邮箱
//     * @param content 邮件内容
//     * @example EmailHelper.sendSimpleMail(" 1747128171 @ qq.com ", " 你好 ! ");
//     */
//    public boolean sendSimpleMail(String to, String subject, String content) {
//        try {
//            emailConfig();
//            SimpleMailMessage message = new SimpleMailMessage();
//            //发件人
//            message.setFrom(MimeUtility.encodeText(fromname) + " <" + from + ">");
//            //收件人
//            message.setTo(to);
//            //邮件标题
//            message.setSubject(subject);
//            //邮件文本内容
//            message.setText(content);
//            message.setBcc();
//            //异步发送邮件
//            Runnable task = new Runnable() {
//                @Override
//                public void run() {
//                    javaMailSender.send(message);
//                }
//            };
//            executor.execute(task);
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new ServiceException("发送html邮件异常! ");
//        }
//    }
//
//    /**
//     * 功能描述：发送html邮件
//     *
//     * @param to      发送目标邮箱
//     * @param content 邮件内容
//     * @example EmailHelper.sendHtmlMail(" 1747128171 @ qq.com ", " < h1 style = ' color : red ' > helloWorld < / h1 > ");
//     */
//    public boolean sendHtmlMail(String to, String subject, String content, String sign, String fromx) {
//        try {
//            emailConfig();
//            //创建message
//            MimeMessage message = javaMailSender.createMimeMessage();
//            MimeMessageHelper helper = new MimeMessageHelper(message, true);
//            if (StringKit.isWhite(sign)) {
//                sign = fromname;
//            }
//            if (StringKit.isWhite(fromx)) {
//                fromx = from;
//            }
//            //发件人
//            helper.setFrom(MimeUtility.encodeText(sign) + " <" + fromx + ">");
//            //收件人
//            helper.setTo(to);
//            //邮件标题
//            helper.setSubject(subject);
//            //true指的是html邮件
//            helper.setText(content, true);
//            //异步发送邮件
//            Runnable task = new Runnable() {
//                @Override
//                public void run() {
//                    javaMailSender.send(message);
//                }
//            };
//            executor.execute(task);
//            return true;
//        } catch (MessagingException | UnsupportedEncodingException e) {
//            e.printStackTrace();
//            throw new ServiceException("发送html邮件异常");
//        }
//    }
//
//    public boolean sendHtmlMail(String to, String subject, String content) {
//        return sendHtmlMail(to, subject, content, null, null);
//    }
//
//    /**
//     * 功能描述：发送带图片的HTML邮件
//     *
//     * @param to      发送目标邮箱
//     * @param content 邮件内容
//     * @param imgPath 图片路径
//     * @param imgId   图片id，在img标签里使用
//     * @throws MessagingException the messaging exception
//     * @example EmailHelper.sendImageMail(" 1747128171 @ qq.com ", " < h1 style = ' color : red ' > helloWorld < / h1 > < img src = ' cid : test001 ' / > ", " C : \ \ Users \ \ LFG \ \ Desktop \ \ test.png ", " test001 ");
//     */
//    public boolean sendImageMail(String to, String subject, String content, String imgPath, String imgId) {
//        try {
//            emailConfig();
//            //创建message
//            MimeMessage message = javaMailSender.createMimeMessage();
//            MimeMessageHelper helper = new MimeMessageHelper(message, true);
//            //发件人
//            helper.setFrom(MimeUtility.encodeText(fromname) + " <" + from + ">");
//            //收件人
//            helper.setTo(to);
//            //标题
//            helper.setSubject(subject);
//            //true指的是html邮件，false指的是普通文本
//            helper.setText(content, true);
//            //添加图片
//            FileSystemResource file = new FileSystemResource(new File(imgPath));
//            helper.addInline(imgId, file);
//            //异步发送邮件
//            Runnable task = new Runnable() {
//                @Override
//                public void run() {
//                    javaMailSender.send(message);
//                }
//            };
//            executor.execute(task);
//            return true;
//        } catch (MessagingException | UnsupportedEncodingException e) {
//            e.printStackTrace();
//            throw new ServiceException("发送带图片的HTML邮件异常");
//        }
//    }
//
//    /**
//     * 功能描述：发送带附件的HTML邮件
//     *
//     * @param to       发送目标邮箱
//     * @param content  邮件内容
//     * @param filePath 附件路径
//     * @example EmailHelper.sendAttachMail(" 1747128171 @ qq.com ", " < h1 style = ' color : red ' > helloWorld < / h1 > ", " C : \ \ Users \ \ * * * \ \ * * * * \ \ * * * * \ \ * * * .xls ");
//     */
//    public boolean sendAttachMail(String to, String subject, String content, String filePath) {
//        try {
//            emailConfig();
//            MimeMessage message = javaMailSender.createMimeMessage();
//            MimeMessageHelper helper = new MimeMessageHelper(message, true);
//            //发件人
//            helper.setFrom(MimeUtility.encodeText(fromname) + " <" + from + ">");
//            //收件人
//            helper.setTo(to);
//            //标题
//            helper.setSubject(subject);
//            //true指的是html邮件，false指的是普通文本
//            helper.setText(content, true);
//            //添加附件
//            FileSystemResource file = new FileSystemResource(new File(filePath));
//            helper.addAttachment(file.getFilename(), file);
//            //异步发送邮件
//            Runnable task = new Runnable() {
//                @Override
//                public void run() {
//                    javaMailSender.send(message);
//                }
//            };
//            executor.execute(task);
//            return true;
//        } catch (MessagingException | UnsupportedEncodingException e) {
//            e.printStackTrace();
//            throw new ServiceException("发送带附件的HTML邮件异常");
//        }
//    }
//
//    /**
//     * 功能描述：发送模板HTML邮件
//     *
//     * @param to           发送目标邮箱
//     * @param templatePath 模板路径, 相对于templates目录. 例如 message.ftl
//     * @param paramsMap    变量映射对, 用于驱动Freemarker模板引擎进行模板变量渲染.
//     */
//    public boolean sendTemplateMail(String to, String subject, String templatePath, Map<String, Object> paramsMap) {
//        try {
//            emailConfig();
//            Template template = templateEngine.getConfiguration().getTemplate(templatePath);
//            String tempContext = FreeMarkerTemplateUtils.processTemplateIntoString(template, paramsMap);
//            return sendHtmlMail(to, subject, tempContext);
//        } catch (IOException | TemplateException e) {
//            e.printStackTrace();
//            throw new ServiceException("发送模板HTML邮件异常");
//        }
//    }
//}
//
//
